<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class User extends CI_Controller 
{
    private $_userId;
  
    public function __construct()
    {
        parent::__construct();
        $this->load->model('usermodel');
        
        if ($this->router->method != 'register' AND $this->router->method != 'login') {
            $this->_userId = (int) $_SESSION['userLoggedIn']['id'];
            if(!isset($_SESSION['userLoggedIn'])) {
                redirect();
            }
        }
        $this->load->helper('frontend');
        $this->load->helper('user');
    }

    /**
     * Action changingAccountInformation
     * @return void
     */
    function changingAccountInformation() 
    {
        $this->load->helper('user');
        $this->load->library(array('form_validation'));

        $this->form_validation->set_rules('real_name', 'Họ và tên', 'trim|min_length[2]|max_length[32]|xss_clean');
    	$this->form_validation->set_rules('email', 'Email của bạn', 'trim|max_length[64]|valid_email|is_unique[users.email]');
    	$this->form_validation->set_rules('password', 'Mật khẩu', 'trim|min_length[5]|max_length[16]|md5|xss_clean');
  	    $this->form_validation->set_rules('tel', 'Số điện thoại', 'trim|xss_clean');
  	    $this->form_validation->set_rules('address', 'Địa chỉ', 'trim|xss_clean');
    	$this->form_validation->set_rules('sex', 'Chọn giới tính', 'trim|xss_clean');
    	$this->form_validation->set_rules('day', 'Ngày', 'trim|xss_clean');
    	$this->form_validation->set_rules('month', 'Tháng', 'trim|xss_clean');
    	$this->form_validation->set_rules('year', 'Năm', 'trim|xss_clean');

      	if ($this->form_validation->run() == FALSE) {  	    
      	    $data['user'] = $this->usermodel->getUserById($this->_userId);
            $this->_data['content'] = $this->load->view('user/changing_account_information', $data, true);
            $this->load->view('layout/middleoffice/index', $this->_data);    
    	} else { //if valid
    	    $flag = TRUE;
    	    if (isset($_POST['real_name-submit'])) {
    	        if ($_POST['real_name']) {
        	        $fieldUpdate['real_name'] = $_POST['real_name'];
        	    } else {
                    $flag = FALSE;
        	    } 
    	    } elseif (isset($_POST['email-submit'])) {
    	        if ($_POST['email']) {
        	        $fieldUpdate['email'] = $_POST['email'];
        	    } else {
                    $flag = FALSE;
        	    } 
    	    } elseif (isset($_POST['password-submit'])) {
    	        if ($_POST['password']) {
        	        $fieldUpdate['password'] = $_POST['password'];
        	    } else {
                    $flag = FALSE;
        	    } 
    	    } elseif (isset($_POST['tel-submit'])) {
    	        if ($_POST['tel']) {
        	        $fieldUpdate['tel'] = $_POST['tel'];
        	    } else {
                    $flag = FALSE;
        	    } 
    	    } elseif (isset($_POST['address-submit'])) {
    	        if ($_POST['address']) {
        	        $fieldUpdate['address'] = $_POST['address'];
        	    } else {
                    $flag = FALSE;
        	    } 
    	    } elseif (isset($_POST['sex-submit'])) {
    	        if ($_POST['sex']) {
        	        $fieldUpdate['sex'] = $_POST['sex'];
        	    } else {
                    $flag = FALSE;
        	    } 
    	    } elseif (isset($_POST['birthday-submit'])) {
    	        if ($_POST['year'] && $_POST['month'] && $_POST['day']) {
        	        $fieldUpdate['birthday'] = $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'];
        	    } else {
                    $flag = FALSE;
        	    }       
    	    }
    	    
    	    if ($flag) {
    	        $this->usermodel->update($this->_userId, $fieldUpdate);
    	  	    $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
    	    } else {
    	        $this->session->set_flashdata('message', 'Yêu cầu nhập giá trị!');
    	    }
    	  	
            redirect('user/changingAccountInformation');
    	}
    }
    
    /**
     * Action transaction
     * @return void
     */
    function transaction() 
    {
        $data = '';
        $this->_data['content'] = $this->load->view('user/transaction', $data, true);
        $this->load->view('layout/middleoffice/index', $this->_data);    
    }
    
    /**
     * Action history
     * @return void
     */
    function history() 
    {
        $data = '';
        $this->_data['content'] = $this->load->view('user/history', $data, true);
        $this->load->view('layout/middleoffice/index', $this->_data);    
    }
    
    /**
     * Action recharge
     * @return void
     */
    function recharge() 
    {
        $data = '';
        $this->_data['content'] = $this->load->view('user/recharge', $data, true);
        $this->load->view('layout/middleoffice/index', $this->_data);    
    }
    
	/**
	 * Ajax upload to temp
	 * 
	 * @return string list file upload
	 */
	public function uploadFileWithAjax()
	{
	  $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);
      if ($fn) {
      	// AJAX call
      	file_put_contents(
      		'upload/user/temp/' . $fn,
      		file_get_contents('php://input')
      	);
      	echo "$fn uploaded";
      	exit();
      }
	}
	
    public function addAvatar()
	{
// 	    if (isset($_POST['avatar'])) {
// 	      $this->usermodel->update($this->_userId, array('avatar' => $_POST['avatar']));
// 	      $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
	      
// 	      redirect('user/changingAccountInformation');   
// 	    }
	    if ($_POST['dataRecruitmentCropJson'] != '') {
    	    $data = ''; // file name to insert db
    	    $file = json_decode($_POST['dataRecruitmentCropJson'], TRUE);	    
    	    $this->load->library('image_lib');
    	    
            //1. remove old file if exist
            // make dir if not exist
    	    $dir = 'upload/user/' . $this->_userId;
            if (!file_exists($dir)) {
                @mkdir($dir, 0777, true);
            }
    	    
        	$files = glob($dir . '/*'); // get all file names
            foreach($files as $file){ // iterate files
              if(is_file($file))
                unlink($file); // delete file
            }
    	    
    	    foreach ($file as $fileName => $fileData) {
    	        // 2.crop image
    	        $this->image_lib->initialize(array(
            		'image_library' => 'gd2',
            		'source_image' => 'upload/user/temp/' . $fileName,
            		'width' => $fileData['w'],
            		'height' => $fileData['h'],
    	        	'x_axis' => $fileData['x'],
    	        	'y_axis' => $fileData['y'],
          			'maintain_ratio' => FALSE
                ));
          
                if (!$this->image_lib->crop()) {              
                    $this->session->set_flashdata('message', $this->image_lib->display_errors());
                    redirect('user/changingAccountInformation');
                    return FALSE;
                } else {                              
                    // 3.resize image
                    $this->image_lib->initialize(array(
                      	'image_library' => 'gd2',
                      	'source_image' => 'upload/user/temp/' . $fileName,
                        'new_image' => 'upload/user/' . $this->_userId . '/' . $fileName,
                      	'width' => 98,
                      	'height' => 108,
                    	'maintain_ratio' => TRUE
                    ));
                    if (!$this->image_lib->resize()) {
                        $this->session->set_flashdata('message', $this->image_lib->display_errors());
                        redirect('user/changingAccountInformation');
              	        return FALSE;
                    }
                } 
                $this->image_lib->clear();
                // 4.remove temp file
                unlink('upload/user/temp/' . $fileName);
                
                $data = $fileName;
    	    }
    	    
    	    // 5.add to db
            $this->usermodel->update($this->_userId, array('avatar' => $data));
            $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
	    
            redirect('user/changingAccountInformation');
	    } else {
	        $this->session->set_flashdata('message', 'Bạn chưa chọn ảnh!');
	        redirect('user/changingAccountInformation');
	    }
	}
  
    /**
     * Action register
     * @return void
     */
    public function register()
    {
  	    $this->load->library(array('form_validation'));
    
    	$this->form_validation->set_rules('real_name', 'Họ và tên', 'trim|required|min_length[2]|max_length[32]|xss_clean');
    	$this->form_validation->set_rules('email', 'Email của bạn', 'trim|required|max_length[64]|valid_email|is_unique[users.email]');
    	$this->form_validation->set_rules('password', 'Mật khẩu', 'trim|required|min_length[5]|max_length[16]|matches[repassword]|md5|xss_clean');
    	$this->form_validation->set_rules('repassword', 'Nhập lại mật khẩu', 'trim|xss_clean');
  	    $this->form_validation->set_rules('tel', 'Số điện thoại', 'trim|xss_clean');
  	    $this->form_validation->set_rules('address', 'Địa chỉ', 'trim|xss_clean');
    	$this->form_validation->set_rules('sex', 'Chọn giới tính', 'trim|xss_clean');
    	$this->form_validation->set_rules('day', 'Ngày', 'trim|xss_clean');
    	$this->form_validation->set_rules('month', 'Tháng', 'trim|xss_clean');
    	$this->form_validation->set_rules('year', 'Năm', 'trim|xss_clean');
    	
  	    if ($this->form_validation->run() == FALSE) { 
  	        // Lỗi xảy ra trong quá trình submit
  	        if(validation_errors()) {
  	            $this->session->set_flashdata('message', 'Đã ký thất bại. Hãy liên hệ với admin để được trợ giúp!');
  	            redirect();
  	        } else { // Hiển thị form đăng ký cho lần đầu tiên
                $this->load->view('user/register');
  	        }
  	    } else { 
  	        if ($_POST['year'] && $_POST['month'] && $_POST['day']) {
  	            $_POST['birthday'] = $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'];
  	        }
  	        
  	        $this->load->library('gdo_email');
  	        $this->gdo_email->send_mail($_POST);
  	        
  	        // Loại bỏ các giá trị ko có trong db
  	        unset($_POST['repassword']);
  	        unset($_POST['day']);
  	        unset($_POST['month']);
  	        unset($_POST['year']);
//   	        $insertId = $this->usermodel->add($_POST);
//   	        $_SESSION['userLoggedIn'] = array(
// 				'id' => $insertId,
//         		'email' => $_POST['email']
//             );
  	  
  	        $this->session->set_flashdata('message', 'Bạn vui lòng kiểm tra email để kích hoạt tài khoản!');
  	        
  	        redirect();
  	    }
    }
  
    /**
     * Action Ajax login
     * @return boolean
     */
    function login()
    {
        $this->load->library('form_validation'); 
  	    $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
        $this->form_validation->set_rules('password', 'Mật khẩu', 'trim|required|xss_clean|callback_checkDatabase');
  
        if($this->form_validation->run() == FALSE) {
          echo FALSE;
        } else { //if valid
          echo TRUE;
        }
    }
  
    /**
     * Action logout
     * @return void
     */
    function logout()
    {
	    $_SESSION = array();
	    // Remove the session ID cookie
	    if (isset($_COOKIE[session_name()])) {
	        setcookie(session_name(), '', time() - 42000, '/');
	    }
	    session_destroy();
        redirect();
    }
  
    /**
     * Private function check login
     * @param varchar $password
     * @return boolean
     */
    function checkDatabase($password)
    {
        $row = $this->usermodel->login($_POST['email'], $password);
        if ($row) {
            $_SESSION['userLoggedIn'] = array(
               'id' => $row['user_id'],
               'email' => $row['email'],
               'avatar' => $row['avatar'],
               'point' => $row['point'],
               'real_name' => $row['real_name']            
            );
          
            return TRUE;
        } else {
            $this->form_validation->set_message('checkDatabase', 'Tên truy cập hoặc mật khẩu không chính xác');
      
            return FALSE;
        }
    }
}